import sys
from bisect import bisect_right, bisect_left
import os
import sys
from io import BytesIO, IOBase
from math import factorial, floor, sqrt, inf, ceil
from collections import defaultdict, deque
BUFSIZE = 8192
class FastIO(IOBase):
newlines = 0
def __init__(self, file):
self._fd = file.fileno()
self.buffer = BytesIO()
self.writable = "x" in file.mode or "r" not in file.mode
self.write = self.buffer.write if self.writable else None
def read(self):
while True:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
if not b:
break
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines = 0
return self.buffer.read()
def readline(self):
while self.newlines == 0:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
self.newlines = b.count(b"\n") + (not b)
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines -= 1
return self.buffer.readline()
def flush(self):
if self.writable:
os.write(self._fd, self.buffer.getvalue())
self.buffer.truncate(0), self.buffer.seek(0)
class IOWrapper(IOBase):
def __init__(self, file):
self.buffer = FastIO(file)
self.flush = self.buffer.flush
self.writable = self.buffer.writable
self.write = lambda s: self.buffer.write(s.encode("ascii"))
self.read = lambda: self.buffer.read().decode("ascii")
self.readline = lambda: self.buffer.readline().decode("ascii")
sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
input = lambda: sys.stdin.readline().rstrip("\r\n")
def inp():
return(int(input()))
def inlt():
return(list(map(int,input().split())))
def insr():
s = input()
return(s[:len(s) - 1])
def invr():
return(map(int,input().split()))
def insr2():
s = input()
return(s.split(" "))
def make_divisors(n):
divisors = []
for i in range(1, int(n**0.5)+1):
if n % i == 0:
divisors.append(i)
if i != n // i and i != 1:
divisors.append(n // i)
return divisors
def dfs(graph, vertex):
visited = set()
tree = []
deq = deque([vertex])
while deq:
vertex = deq.pop()
if vertex not in visited:
visited.add(vertex)
deq.extend(graph[vertex])
tree.append(vertex)
return tree
def find_in_sorted_list(elem, sorted_list):
'Locate the leftmost value exactly equal to x'
i = bisect_left(sorted_list, elem)
if i != len(sorted_list) and sorted_list[i] == elem:
return i
return -1
class SegmentTree:
def __init__(self, data, default=0, func=lambda a, b: a+b):
self._default = default
self._func = func
self._len = len(data)
self._size = _size = 1 << (self._len - 1).bit_length()
self.data = [default] * (2 * _size)
self.data[_size:_size + self._len] = data
for i in reversed(range(_size)):
self.data[i] = func(self.data[i + i], self.data[i + i + 1])
def __delitem__(self, idx):
self[idx] = self._default
def __getitem__(self, idx):
return self.data[idx + self._size]
def __setitem__(self, idx, value):
idx += self._size
self.data[idx] = value
idx >>= 1
while idx:
self.data[idx] = self._func(self.data[2 * idx], self.data[2 * idx + 1])
idx >>= 1
def __len__(self):
return self._len
def query(self, start, stop):
if start == stop:
return self.__getitem__(start)
start += self._size
stop += self._size
res = self._default
while start < stop:
if start & 1:
res = self._func(res, self.data[start])
start += 1
if stop & 1:
stop -= 1
res = self._func(res, self.data[stop])
start >>= 1
stop >>= 1
return res
def __repr__(self):
return "SegmentTree({0})".format(self.data)
n, m, k = inlt()
i, j = 1,1
reverse = False
c = 0
cur_tube = []
tubes = 0
last_tube = False
while c < n*m:
if reverse == False:
while j <= m:
cur_tube.append(i)
cur_tube.append(j)
j += 1
c += 1
if c%2 == 0:
if tubes != k-1:
tubes += 1
cur_tube.insert(0, 2)
print(' '.join([str(a) for a in cur_tube]))
cur_tube = []
reverse = True
j = m
i += 1
else:
while j > 0:
cur_tube.append(i)
cur_tube.append(j)
j -= 1
c += 1
if c%2 == 0:
if tubes != k-1:
tubes += 1
cur_tube.insert(0, 2)
print(' '.join([str(a) for a in cur_tube]))
cur_tube = []
reverse = False
j = 1
i += 1
if cur_tube:
cur_tube.insert(0, len(cur_tube)//2)
print(' '.join([str(a) for a in cur_tube]))
#include<bits/stdc++.h>
using namespace std;
long long n,m,k;
void To_Next(long long &x,long long &y);
int main(){
scanf("%lld%lld%lld",&n,&m,&k);
for(long long i=1,x=1,y=1,siz=n*m/k;i<=k;i++){
long long sig=(i==k?(siz+n*m%k):(siz));
printf("%lld ",sig);
while(sig--){
printf("%lld %lld ",x,y);
To_Next(x,y);
}
printf("\n");
}
return 0;
}
void To_Next(long long &x,long long &y){
if(x&1){
y++;
if(y>m){
x++,y=m;
}
}else{
y--;
if(y<1){
x++,y=1;
}
}
}
1077A - Frog Jumping | 1714G - Path Prefixes |
1369C - RationalLee | 289B - Polo the Penguin and Matrix |
1716A - 2-3 Moves | 1670B - Dorms War |
1716B - Permutation Chain | 987A - Infinity Gauntlet |
1676G - White-Black Balanced Subtrees | 1716D - Chip Move |
1352F - Binary String Reconstruction | 1487B - Cat Cycle |
1679C - Rooks Defenders | 56A - Bar |
1694B - Paranoid String | 35A - Shell Game |
1684A - Digit Minimization | 43B - Letter |
1017A - The Rank | 1698B - Rising Sand |
235A - LCM Challenge | 1075B - Taxi drivers and Lyft |
1562A - The Miracle and the Sleeper | 1216A - Prefixes |
1490C - Sum of Cubes | 868A - Bark to Unlock |
873B - Balanced Substring | 1401D - Maximum Distributed Tree |
1716C - Robot in a Hallway | 1688B - Patchouli's Magical Talisman |